用xlwings包设置Excel工作表

Python的xlwings包是一个功能非常强大的包。它本质上是二次封装了VBA所使用的Excel类库。所以,从这方面讲,VBA能做的,基于xlwings包Python也能做。本节主要介绍如何使用xlwings包设置单元格区域的边框、单元格区域的背景色、设置字体、对齐方式和单元格区域的合并和quxiao 合并等。[大谦Excel,dqexcel点com]

设置边框

【问题描述】

用xlwings包设置单元格区域的边框。

【示例11-1】

本例使用的Excel文件的完整路径为“D:/Samples/ch11/xlwings/01 设置边框/班级检查.xlsx”。该文件打开后如图11-1所示,是各班班级检查的得分表。请给数据所在单元格区域添加边框。内边框设置为黑色细线,外边框设置为红色粗线。

Document Image

图11-1 班级检查得分表

  • 编写下面的xlwings代码:
code.python
import xlwings as xw
# 打开文件
filename = 'D:/Samples/ch11/xlwings/01 设置边框/班级检查.xlsx'
wb = xw.Book(filename)
# 选择单元格区域
sheet = wb.sheets[0]
rng = sheet.range('B3:I16')
# 设置外边框为粗红线
border = xw.constants.LineStyle.xlContinuous  # 实线样式
weight = xw.constants.BorderWeight.xlThick   # 粗线条宽度
color = xw.utils.rgb_to_int((255, 0, 0))     # 红色
rng.api.Borders(xw.constants.BordersIndex.xlEdgeLeft).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlEdgeTop).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlEdgeRight).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlEdgeBottom).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlInsideVertical).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlInsideHorizontal).LineStyle = border
rng.api.Borders(xw.constants.BordersIndex.xlEdgeLeft).Weight = weight
rng.api.Borders(xw.constants.BordersIndex.xlEdgeTop).Weight = weight
rng.api.Borders(xw.constants.BordersIndex.xlEdgeRight).Weight = weight
rng.api.Borders(xw.constants.BordersIndex.xlEdgeBottom).Weight = weight
rng.api.Borders(xw.constants.BordersIndex.xlInsideVertical).Weight = xw.constants.BorderWeight.xlThin
rng.api.Borders(xw.constants.BordersIndex.xlInsideHorizontal).Weight = xw.constants.BorderWeight.xlThin
rng.api.Borders(xw.constants.BordersIndex.xlEdgeLeft).Color = color
rng.api.Borders(xw.constants.BordersIndex.xlEdgeTop).Color = color
rng.api.Borders(xw.constants.BordersIndex.xlEdgeRight).Color = color
rng.api.Borders(xw.constants.BordersIndex.xlEdgeBottom).Color = color
# 设置内边框为细黑线
color = xw.utils.rgb_to_int((0, 0, 0))      # 黑色
rng.api.Borders(xw.constants.BordersIndex.xlInsideVertical).Color = color
rng.api.Borders(xw.constants.BordersIndex.xlInsideHorizontal).Color = color
# 保存文件并关闭应用
wb.save()
wb.close()

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,打开示例数据文件,在工作表中设置数据所在单元格区域的内边框和外边框如图11-2所示。然后关闭工作簿。

Document Image

图11-2 设置数据所在单元格区域的边框

【知识点扩展】

使用xlwings包之前需要先导入该包,即

code.python
import xlwings as xw

使用xlwings的Book函数可以直接打开示例数据文件。该函数返回一个Excel工作簿对象。

code.python
filename = 'D:/Samples/ch11/xlwings/01 设置边框/班级检查.xlsx'
wb = xw.Book(filename)

对工作簿对象的sheets属性值进行索引,得到第1个工作表。

code.python
sheet = wb.sheets[0]

用工作表对象的range属性,指定单元格区域范围,得到数据所在的单元格区域。

code.python
rng = sheet.range('B3:I16')

然后就可以对该单元格区域进行边框设置了。

操作完成以后,用工作簿对象的save方法保存数据。

code.python
wb.save()

用工作簿对象的close方法关闭工作簿。

code.python
wb.close()

此时Excel窗口仍然还在,把上面的语句用下面的语句代替,可以实现退出Excel应用窗口。注意,必须时替换,不能在上面语句后面添加,否则出错。

code.python
wb.app.kill()

与xlwings包有关的内容比较多,感兴趣的同学可以参阅本人拙作《代替VBA!用Python轻松实现Excel编程》一书。

设置背景色

【问题描述】

用xlwings包打开Excel文件,并设置工作表中指定单元格区域的背景色。

【示例11-2】

本例使用的Excel文件的完整路径为“D:/Samples/ch11/xlwings/ 02 设置背景色/学生成绩.xlsx”。该文件打开后如图11-3所示,是各考生的语文、数学和英语考试成绩。要求在B-D列中,将值大于等于95的单元格的背景色设置为粉红色,将值小于60的单元格的背景色设置为淡绿色。

Document Image

图11-3 各科目考试成绩

  • 编写下面的xlwings代码:
code.python
import xlwings as xw
# 打开Excel文件
file_path = 'D:/Samples/ch11/xlwings/02 设置背景色/学生成绩.xlsx'
app = xw.App(visible=False)
workbook = app.books.open(file_path)
# 获取第一个工作表
worksheet = workbook.sheets[0]
# 遍历B-D列,将值大于等于95的单元格设置为粉红色,将值小于60的单元格设置为淡绿色
for column in ['B', 'C', 'D']:
    for cell in worksheet.range(f'{column}2:{column}11'):
        if cell.value is not None:
            if cell.value >= 95:
                cell.color = xw.utils.rgb_to_int((255, 192, 203)) # 粉红色
            elif cell.value < 60:
                cell.color = xw.utils.rgb_to_int((144, 238, 144)) # 淡绿色
# 保存并退出Excel应用
workbook.save()
app.quit()

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,打开示例数据文件,在工作表中设置指定单元格的背景色如图11-4所示。然后保存工作簿,退出Excel应用。

Document Image

图11-4 设置单元格的背景色

【知识点扩展】

设置单元格的背景色,设置cell对象的color属性即可。xlwings中设置颜色的方法是使用xw.utils.rgb_to_int函数,用颜色的红色、绿色和兰色分量进行设置。

code.python
cell.color = xw.utils.rgb_to_int((255, 192, 203))

设置字体

【问题描述】

用xlwings包打开Excel文件,并设置工作表中指定单元格中文本的字体。

【示例11-3】

本例使用的Excel文件的完整路径为“D:/Samples/ch11/xlwings/03 设置字体/成绩.xlsx”。该文件打开后如图11-5所示,是示例11-2数据的一部分。要求设置B3单元格中文本的字体,字体名称为“黑体”,字体大小为20,加粗,字体颜色为红色;D4单元格中文本的字体名称为“宋体”,字体大小为30,字体颜色为兰色,倾斜。

Document Image

图11-5 成绩数据

  • 编写下面的xlwings代码:
code.python
import xlwings as xw
# 打开成绩.xlsx文件
wb = xw.Book(r'D:/Samples/ch11/xlwings/03 设置字体/成绩.xlsx')
# 获取Sheet1工作表
sht = wb.sheets['Sheet1']
# 设置B3单元格中文本的字体
sht.range('B3').api.Font.Name = '黑体'
sht.range('B3').api.Font.Size = 20
sht.range('B3').api.Font.Bold = True
sht.range('B3').api.Font.Color = xw.utils.rgb_to_int((255, 0, 0)) # 将颜色参数转换为RGB整数值
# 设置D4单元格中文本的字体
sht.range('D4').api.Font.Name = '宋体'
sht.range('D4').api.Font.Size = 30
sht.range('D4').api.Font.Italic = True # 将字体设置为倾斜
sht.range('D4').api.Font.Color = xw.utils.rgb_to_int((0, 128, 128))
# 保存文件并退出应用程序
wb.save()
wb.close()

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,打开示例数据文件,在工作表中设置指定单元格中文本的字体如图11-6所示。然后保存工作簿,关闭工作簿。

Document Image

图11-6 设置指定单元格中文本的字体

【知识点扩展】

用xlwings包设置单元格中文本的字体,需要用api使用方式得到文本的Font对象,然后利用Font对象的属性和方法进行字体设置。

设置对齐方式

【问题描述】

用xlwings包打开Excel文件,并设置工作表中指定单元格中内容的对齐方式。内容对齐,有水平对齐和垂向对齐两个方向的设置。

【示例11-4】

本例使用的Excel文件的完整路径为“D:/Samples/ch11/xlwings/ 04 设置对齐方式/人员信息.xlsx”。该文件打开后如图11-7所示,是不同工作人员的工资数据。要求设置B3单元格中文本水平居中对齐;D5单元格中的文本水平左对齐;B8单元格中的文本水平右对齐,垂直方向顶对齐。

Document Image

图11-7 人员工资数据

  • 编写下面的xlwings代码:
code.python
import xlwings as xw
# 打开人员信息.xlsx文件
wb = xw.Book(r'D:/Samples/ch11/xlwings/04 设置对齐方式/人员信息.xlsx')
# 获取Sheet1工作表
sheet1 = wb.sheets['Sheet1']
# 设置B3单元格中文本的对齐方式为水平居中对齐
sheet1.range('B3').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter
# 设置D5单元格中文本的对齐方式为水平左对齐
sheet1.range('D5').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignLeft
# 设置B8单元格文本的对齐方式为水平右对齐,垂直方向顶对齐
sheet1.range('B8').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignRight
sheet1.range('B8').api.VerticalAlignment = xw.constants.VAlign.xlVAlignTop
# 保存文件并退出xlwings应用
wb.save()
wb.close()

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,打开示例数据文件,在工作表中设置指定单元格中文本的对齐方式如图11-8所示。然后保存工作簿,关闭工作簿。

Document Image

图11-8 指定各单元格中文本的对齐方式

【知识点扩展】

用xlwings包设置单元格中文本的对齐方式,需要用api使用方式设置HorizontalAlignment属性和VerticalAlignment属性的值,例如

code.python
sheet1.range('B8').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignRight
sheet1.range('B8').api.VerticalAlignment = xw.constants.VAlign.xlVAlignTop

单元格合并和取消合并

【问题描述】

用xlwings包打开Excel文件,并合并工作表中指定的单元格区域,或取消合并某合并单元格。

【示例11-5】

本例使用的Excel文件的完整路径为“D:/Samples/ch11/xlwings/05 单元格的合并和拆分/合并和拆分.xlsx”。该文件打开后如图11-9所示,B8是合并单元格。要求合并单元格区域B3:C4,将单元格B8取消合并。

Document Image

图11-9 给定数据

  • 编写下面的xlwings代码:
code.python
import xlwings as xw
# 打开文件
filepath = 'D:/Samples/ch11/xlwings/05 单元格的合并和拆分/合并和拆分.xlsx'
wb = xw.Book(filepath)
# 选择操作的工作表
sheet_name = 'Sheet1'
sheet = wb.sheets[sheet_name]
# 合并B3:C4单元格
cell_range = sheet.range('B3:C4')
cell_range.merge()
# 取消合并B8单元格
cell_range = sheet.range('B8')
cell_range.unmerge()
# 保存文件并退出
wb.save()
wb.close()

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存。运行脚本,打开示例数据文件,在工作表中合并单元格区域B3:C4,将单元格B8取消合并如图11-10所示。然后保存工作簿,关闭工作簿。

Document Image

图11-10 合并单元格和取消合并单元格

【知识点扩展】

使用xlwings包,调用单元格区域对象的merge方法和unmerge方法合并单元格区域和取消合并单元格区域。